package com.cuz.daileetcode.bat100;

import java.util.Arrays;

/**
 * 小S新买了一个掌上游戏机，这个游戏机由两节5号电池供电。
 * 为了保证能够长时间玩游戏，他买了很多5号电池，这些电池的生产商不同，
 * 质量也有差异，因而使用寿命也有所不同，有的能使用5个小时，
 * 有的可能就只能使用3个小时。显然如果他只有两个电池一个能用5小时一个能用3小时，
 * 那么他只能玩3个小时的游戏，有一个电池剩下的电量无法使用，但是如果他有更多的电池
 * ，就可以更加充分地利用它们，比如他有三个电池分别能用3、3、5小时，
 * 他可以先使用两节能用3个小时的电池，使用半个小时后再把其中一个换成能使用5个小时的电池
 * ，两个半小时后再把剩下的一节电池换成刚才换下的电池（那个电池还能用2.5个小时），
 * 这样总共就可以使用5.5个小时，没有一点浪费。
 * 现在已知电池的数量和电池能够使用的时间，
 * 请你找一种方案使得使用时间尽可能的长。
 */
public class 电池的寿命 {
    public static void main(String[] args) {
        int[] ints = {1, 2, 2, 4, 5};
        System.out.println(solution1(ints));
        System.out.println(电池分配大楼时间问题.solution1(ints, 2));
    }

    public static double solution1(int[] arr) {
        if (arr == null || arr.length < 2) {
            return 0;
        }
        int[] preSum = sortAndPreSum(arr);
        int length = arr.length;
        if (arr[length - 1] >= preSum[length - 2]) {
            return preSum[length - 2];
        }
        return preSum[length - 1] / 2.0;
    }

    private static int[] sortAndPreSum(int[] arr) {
        Arrays.sort(arr);
        int[] preSum = new int[arr.length];
        preSum[0] = arr[0];
        for (int i = 1; i < preSum.length; i++) {
            preSum[i] = preSum[i - 1] + arr[i];
        }
        return preSum;
    }
}
